※以下內容皆是新手撰寫,內容可能不完全正確
C#的資料類型分三種,今天要盡力把自己理解的轉換成文字(越來越不曉得自己有沒有理解這些東西了)
btw,爬英文教學跟論壇最難的不是字看不懂,而是字的意思都懂但意思沒通( ´•̥̥̥ω•̥̥̥` )
希望我的文裡額外加的英文有幫助 ˊˇˋ
A. 值型式(value types)
值型式變數是從System.ValueType衍生出來的,顧名思義,可以直接給這種變數一個值。值型式本身就存著資料,舉凡int(存取數字)、char(存取字母)、float(存取小數點)等變數。舉例,每當宣告一個int,系統會分配記憶體存取那個值。
e.g. int n = 5
下圖中為一些可用的值型式:
(image source:https://www.tutorialspoint.com/csharp/csharp_data_types.htm)
若想知道某平台上的某型式或某便數的確切大小,可以用sizeof(輸入某型式)這個方法判斷物件或類型佔掉幾個byte(發了好多天的文才發現有程式碼區塊這東西(-_-lll)):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Size of int:{0}", sizeof(int));
Console.WriteLine("Size of float:{0}", sizeof(float));
Console.WriteLine("Size of double:{0}", sizeof(double));
}
}
}
執行上面這段程式碼會輸出:
Size of int:4
Size of float:4
Size of double:8
B. 參考型式(reference types)
參考型式沒有帶著變數實際的資料,但可用多個變數連接到記憶體位置(memory location);記憶體位置的資料若為某變數所更動,其他變數會也會有所改變。以三種內建參考型式為例:
物件型式(object type):物件型式(System.Object類別)可賦予其任何其他型式的值,如值型式、參考型式、自定義或已定義的,不過給予其值之前得先進行轉換。
值型式轉換成物件型式稱作裝箱(boxing),反之則稱作開箱(unboxing)。以下是boxing的動作:
object Yee;
Yee = 87;
動態型式(dynamic type):動態資料型式可存取任何值,會在運行時間(run time)確認這類型的變數型式,跟物件型式的差別在於物件型式是在編譯時間(compile time)確認變數型式的;動態型式的用法:
dynamic example = 9487;
String Yee = “I hate doing homework.”; //first method
@”I hate doing homework.”; //second method
使用者能自己定義的參考型式為類別(class)、介面(interface)和委派(delegate),後面或許會講到。
C. 指標型式(pointer types)
指標型式變數儲存的是別種型式的記憶體位址(memory address)。使用指標型式變數的程式碼便是Unsafe程式碼(Unsafe code)。宣告指標型式的格式為「型式* 識別符;」,例:
char* YeeA;
int* YeeB;
float* YeeC;
Tutorialspoint的Unsafe Codes章節也有提到指標型式:
https://www.tutorialspoint.com/csharp/csharp_unsafe_codes.htm
呼~目前就算不完全看得懂的程式碼,有時候也會練練,期盼再往下學便能知道自己到底在幹嘛(ˊˇˋ) 下一篇講C#的類型轉換
參考資料:
(a) Tutorialspoint; C# - Data Types
https://www.tutorialspoint.com/csharp/csharp_data_types.htm
(b) C# Corner – Pointers in C#
https://www.c-sharpcorner.com/article/pointers-in-C-Sharp/
(c) 國家教育研究院雙語詞彙、學術名詞暨辭書資訊網
http://terms.naer.edu.tw/